"""
序列是指：内容连续、有序，可使用下标索引的一类数据容器
列表、元组、字符串，均可以可以视为序列。

序列的常用操作 - 切片
序列支持切片，即：列表、元组、字符串，均支持进行切片操作

切片：从一个序列中，取出一个子序列

序列[起始下标:结束下标:步长]


表示从序列中，从指定位置开始，依次取出元素，到指定位置结束，得到一个新序列：
- 起始下标表示从何处开始，可以留空，留空视作从头开始
- 结束下标（不含）表示何处结束，可以留空，留空视作截取到结尾
- 步长表示，依次取元素的间隔
- 步长1表示，一个个取元素
- 步长2表示，每次跳过1个元素取
- 步长N表示，每次跳过N-1个元素取
- 步长为负数表示，反向取（注意，起始下标和结束下标也要反向标记）

注意，此操作不会影响序列本身，而是会得到一个新的序列（列表、元组、字符串）

序列如何做切片
- 序列[起始:结束:步长]
- 起始可以省略，省略从头开始
- 结束可以省略，省略到尾结束
- 步长可以省略，省略步长为1（可以为负数，表示倒序执行）
"""

new_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list = new_list[1:4]  # 下标1开始，下标4（不含）结束，默认步长为1
print(new_list)

num_tuple = (2, 4, 6, 8, 10)
new_tuple = num_tuple[1:4:1]  # 下标1开始，下标4（不含）结束，步长为1
print(new_tuple)

ss_list = [1, 3, 5, 7, 9]
newss_list = ss_list[::2]  # 从头开始，到最后结束，步长为2
print(newss_list)

ss_tuple = (5, 7, 9, 11, 13)
newss_tuple = ss_tuple[:4:2]  # 从头开始，到下标4（不含）结束，步长为2
print(newss_tuple)


print("倒序：步长为负数则倒序开始")


num_list = [1, 2, 3, 4, 5]
new_list = num_list[1::-2]
print(new_list)
"""
输出结果为 [2]，这是因为 num_list[1::-2] 这个切片操作：
	起始下标为 1，所以选取了列表中第二个元素；
	步长为 -2，表示从起始下标开始向前每隔两个元素选取一个（步长方向要看是否反转，-2 表示右往左的反向选择）；
	最终得到的序列只有 2 这一个元素符合条件，所以 new_list 中就只有 2 了。
"""

num_tuple = (2, 4, 6, 8, 10)
new_tuple = num_tuple[:1:-2]
print(new_tuple)
"""
输出结果为 (10, 6)，这是因为 num_tuple[:1:-2] 这个切片操作：
	结束下标为 -2（不包括 -2），表示从最后一个元素开始向前每隔两个元素选取一个；
	起始下标没有指定，所以从第一个元素开始选取；
	最终得到的序列中只有 10 和 6 两个元素符合条件，所以 new_tuple 就是它们构成的元组 (10, 6)。
"""

num_str = "12345"
new_str = num_str[::-1]  # 从头（最后）开始，到尾结束，步长-1（倒序）
print(new_str)


print("练习==================")
num_str = "难更人路行，难路行"
new_str = num_str[::-1]
print(f"将其倒序完显示：{new_str}")

newss_str = new_str[4:7]
print(f"方式1的结果是：{newss_str}")

newkk_str = num_str[::-1][4:7]
print(f"方式2的结果是：{newkk_str}")

newoo_str = num_str.split("，")[0].replace("难更", "")[::-1]
print(f"方式3的结果是：{newoo_str}")
